An unorganized 3D point cloud may represent a 3D object to be printed. The unorganized point cloud may be generated by an optical 3D scanner, by a CAD environment or by a computer simulation.
Each point in the point cloud may be represented by a tuple of data. The tuple for a given point in the point cloud may include data that specifies 3D positional coordinates of the point, and that also specifies properties of the point, such as color (e.g., RGBA), material composition, luminance, opacity, or stiffness.
A multi-material 3D printer may deposit multiple build materials to construct a 3D object by sequentially depositing layers of droplets. The printer may precisely control the spatial positioning of deposition of individual material droplets. Material composition may be controlled at the droplet level by defining—for each deposited build material—a set of layers in a raster-format at the native resolution of the printer. This set of layers, in turn, may define the material identity of the individual droplets and their spatial distribution. For example, the set of layers for a given material may comprise binary material representations in raster file format, defining where droplets of the given material will be deposited. Based on these droplet descriptions, a multi-material 3D printer may print a 3D object that comprises a heterogeneous and continuously varying material composite.
There are conventional approaches for converting an unorganized point cloud into instructions for a multi-material 3D printer.
The two most common approaches involve converting the unorganized point cloud into an intermediate data representation.
In one conventional approach, the intermediate data representation is a boundary representation, such as a 3D mesh of polygons (e.g., an STL file that represents the boundary of an object as a mesh of triangles). In this conventional method: (a) an unorganized point cloud is converted into a boundary representation; and (b) the boundary representation is then converted into instructions for a multi-material 3D printer. Unfortunately, this approach (employing a boundary representation as an intermediate step) is computationally expensive. Furthermore, it causes loss of information and distortion of the shape of the object.
In a second conventional approach, the intermediate data representation is a 3D voxel representation, in which each voxel is a volume that is centered at, or that has a vertex located at (or that is shifted by the same distance in the same direction from), a grid point in a regularly-spaced 3D grid. In this second conventional method: (a) the unorganized point cloud is converted into a 3D voxel representation; and (b) this 3D voxel representation is then converted into instructions for a multi-material 3D printer.
Unfortunately, this second approach tends to be impractical due to the extremely massive dataset needed to describe a large multi-material object by a 3D voxel representation at the native resolution of a typical multi-material 3D printer. For example, a Stratasys® J750 3D Printer is a multi-material 3D printer, has a layer thickness of 12 microns for many build materials, and has a build resolution of: x-axis 600 dpi, y-axis 300 dpi, z-axis 2117 dpi. At this native resolution (which is in the approximate range of many multi-material 3D printers), the amount of data required for a 3D voxel representation of a large (e.g. more than 40 cm×30 cm×20 cm), multi-material object would typically be massive. Indeed, the dataset would typically be so large that it would be impractical in most real-world scenarios, either due to insufficient memory or massive computational load resulting in very slow processing.
Thus, a technological problem exists: how to convert an unorganized point cloud into instructions for multi-material 3D printing, in a manner that is computationally efficient and that does not distort the shape of the object being printed.